using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Common.Entidades;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal;

namespace Marlimer.Comercial.Mantenimientos
{
    public partial class frm_Vendedor : Form
    {
        lcom_Vendedor lcom_vendedor = new lcom_Vendedor();
        luni_TipoDocIde luni_tipodocide = new luni_TipoDocIde();
 
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>(); 

        public frm_Vendedor()
        {
            InitializeComponent();
        }

        private void frm_UnidadMedida_Load(object sender, EventArgs e)
        {
            itemsGrid.Add(new itemsGrilla("ccod_vend", "Codigo", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("vendedor", "Vendedor", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cstatus", "Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            this.Location = new Point(0, 0);
            configurarRejilla();
            cargarCombos();
            refreshRejilla(0, "", "", "", 0,"");
        }

        private void cargarCombos()
        {
            Util.LlenarDataCombo(luni_tipodocide.getDTTipoDocIde(), cboDocIden, true);
        }

        private void refreshRejilla(int ccod_vend, String cape_pat, String cape_mat, String cnombres, int ctip_docide, String cnum_docide)
        {
            gridResultados.DataSource = null;
            int flg_anulados = 0;
            if (chkAnulados.Checked)
            {
                flg_anulados = 1;
            }
            DataTable dt = lcom_vendedor.consultaVendedor(ccod_vend, cape_pat,cape_mat, cnombres, ctip_docide, cnum_docide, flg_anulados);
            if (dt != null)
            {
                gridResultados.DataSource = dt;
                Util.setRejillaColumns(gridResultados, itemsGrid);
            }
        }

        private void configurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Codigo", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Vendedor", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void txtGeneralNombres_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Convert.ToChar(e.KeyChar.ToString().ToUpper());
            e.Handled = Util.validaTecla(e.KeyChar, "Direccion", ((TextBox)sender).Text, true);
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void cboDocIden_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboDocIden.SelectedIndex > -1 && cboDocIden.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                txtNumDocIden.Text = "";
                DataTable dtresul = luni_tipodocide.getTipoDocIdeByCod(Convert.ToInt32(Util.ToValor(cboDocIden.SelectedValue.ToString())));
                if (dtresul.Rows.Count > 0)
                {
                    txtNumDocIden.MaxLength = Convert.ToInt32(Util.getValueDT("cnum_digits", 0, dtresul));
                }
            }
        }

        private void txtNumDocIden_Validating(object sender, CancelEventArgs e)
        {
            resulMsgError resul = new resulMsgError(true, "");

            //validamos segun el tipo de documento
            if (Convert.ToInt32(cboDocIden.SelectedValue) > 0)
            {
                resul = Util.validaNumDocIde(sender, cboDocIden.Text);
            }

            if (!resul.resul)
            {
                MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                e.Cancel = true;
            }
        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.limpiaDT((ComboBox)sender, e.KeyChar);   
            Util.validaEnter(e.KeyChar);
        }

        private void genComandos_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            //segun el tag se realiza la accion
            String com = e.ClickedItem.Tag.ToString();
            switch (com)
            {
                case "N":       //nuevo
                    {
                        nuevo();
                        break;
                    }
                case "G":
                    {
                        if (validarCampos())
                        {
                            guardar();
                        }
                        break;
                    }
                case "A":
                    {
                        if (anular(Convert.ToInt32(Util.ToValor(txtCodigo.Text))))
                        {
                            backState();
                        }
                        break;
                    }
                case "B":
                    {
                        buscar();
                        break;
                    }
            }
        }

        private void buscar()
        {
            refreshRejilla(0, txtApePaterno.Text, txtApeMaterno.Text, txtNombres.Text, Convert.ToInt32(cboDocIden.SelectedValue), txtNumDocIden.Text);
        }

        private void guardar()
        {
            //verificamos si desea guardar para poder anular la guardada
            DialogResult resp = MessageBox.Show("Seguro que desea guardar el registro?", this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

            switch (resp)
            {

                case DialogResult.Yes:
                    {
                        InfoVendedor vende = new InfoVendedor();

                        //verificamos si es actualizar
                        if (Util.ToValor(txtCodigo.Text)==0)
                        {
                            vende.cmodo = 1;  //nuevo
                        }
                        else
                        {
                            vende.cmodo = 2;   //actualizar
                        }

                        vende.ccod_vend = Convert.ToInt32(Util.ToValor(txtCodigo.Text));  
                        vende.cape_pat = txtApePaterno.Text.Trim();
                        vende.cape_mat = txtApeMaterno.Text.Trim();
                        vende.cnombres = txtNombres.Text.Trim();
                        vende.ctip_docide = Convert.ToInt32(cboDocIden.SelectedValue);
                        vende.cnum_docide = txtNumDocIden.Text;
                        vende.cstatus = "";

                        resulMsgError resul = lcom_vendedor.guardar(vende);

                        if (resul.resul)
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            backState();
                        }
                        else
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        break;
                    }
                case DialogResult.Cancel:
                    {
                        backState();
                        break; 
                    }

            }
        }

        private void backState()
        {
            txtCodigo.ReadOnly = false; 
            txtCodigo.Text = "";
            txtApePaterno.Text = "";
            txtApeMaterno.Text = "";
            txtNombres.Text = "";
            txtNumDocIden.Text = ""; 

            gridResultados.Enabled = true;
            chkAnulados.Enabled = true; 

            tlbAnular.Enabled = false;
            tlbGuardar.Enabled = false;
            tlbNuevo.Enabled = true;
            tlbBuscar.Enabled = true; 

            mnuAnular.Enabled = false;
            mnuGuardar.Enabled = false;
            mnuNuevo.Enabled = true;
            mnuBuscar.Enabled = true;
            lblMensaje.Visible = false;
            lblStatus.Visible = false; 
            refreshRejilla(0, "","","",0,"");
            cargarCombos(); 
            panDetalles.Enabled = true; 
        }

        private Boolean anular(int ccod_vend)
        {
            InfoVendedor vende = new InfoVendedor();

            vende.ccod_vend = ccod_vend;
            vende.cape_pat = "";
            vende.cape_mat = "";
            vende.cnombres = "";
            vende.cnum_docide = "";

            //verificar si ya ha sido anulado
            if (lblStatus.Text == "ANULADO")
            {
                if (MessageBox.Show("El registro ya se encuentra anulado, desea activarlo?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    vende.cstatus = "A";
                    vende.cmodo = 3;
                    resulMsgError resul = lcom_vendedor.guardar(vende);
                    if (resul.resul)
                    {
                        MessageBox.Show("Registro activado satisfactoriamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return resul.resul;
                    }
                    else
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return resul.resul;
                    }
                }
                else
                {
                    return false;
                }
            }
            else
            {
                vende.cstatus = "D";
                vende.cmodo = 3;
                resulMsgError resul = lcom_vendedor.guardar(vende);
                if (resul.resul)
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return resul.resul;
                }
                else
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return resul.resul;
                }
            }
        }

        private void nuevo()
        {
            cargarCombos(); 
            
            gridResultados.Enabled = false;
            chkAnulados.Enabled = false; 

            tlbGuardar.Enabled = true;
            tlbAnular.Enabled = false;
            mnuGuardar.Enabled = true;
            mnuAnular.Enabled = false;

            tlbNuevo.Enabled = false;
            mnuNuevo.Enabled = false;
            tlbBuscar.Enabled = false;
            mnuBuscar.Enabled = false;
 
            txtCodigo.Text = "";
            txtApePaterno.Text = "";
            txtApeMaterno.Text = "";
            txtNombres.Text = "";
            txtNumDocIden.Text = "";
 
            lblStatus.Visible = false;
            lblMensaje.Visible = true;
            txtCodigo.ReadOnly = false;
            cboDocIden.Focus();  
        }

        private bool validarCampos()
        {
            String msj = "";
            Boolean resul = true;
            //verificamos que cada campo tenga un valor 

            if (txtNumDocIden.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese el numero de documento de identidad";
            }
            else if (txtNumDocIden.Text.Length < txtNumDocIden.MaxLength)
            {
                msj = "El numero de digitos para el documento de identidad, tiene que ser " + txtNumDocIden.MaxLength.ToString() + " digitos";
            }

            if (txtApePaterno.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese el apellidos paterno";
            }

            if (txtApeMaterno.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese el apellido materno";
            }

            if (txtNombres.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese el nombre";
            }

            //si el msj tiene un contenido
            if (msj != "")
            {
                resul = false;
                MessageBox.Show(msj, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            return resul;
        }


        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //validar el formato para anulados
            if (Convert.ToString(gridResultados.Rows[e.RowIndex].Cells["cstatus"].Value) == "D")
            {
                gridResultados.Rows[e.RowIndex].DefaultCellStyle.ForeColor = System.Drawing.Color.Red;
            }
        }

        private void gridResultados_DoubleClick(object sender, EventArgs e)
        {
            //validar de que este una fila seleccionada para el doble click
            if (gridResultados.CurrentRow != null)
            {
                txtCodigo.Text = Convert.ToString(gridResultados.CurrentRow.Cells["ccod_vend"].Value);
                txtApePaterno.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cape_pat"].Value);
                txtApeMaterno.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cape_mat"].Value);
                txtNombres.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cnombres"].Value);
                cboDocIden.SelectedValue = Convert.ToString(gridResultados.CurrentRow.Cells["ctip_docide"].Value);
                txtNumDocIden.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cnum_docide"].Value);

                //consultamos el valor 
                String cstatus = Convert.ToString(gridResultados.CurrentRow.Cells["cstatus"].Value);
                gridResultados.Enabled = false;
                lblStatus.Visible = true;
                //activar el modo edicion // activar guardar// desactivar grilla //activar anular
                txtCodigo.ReadOnly = true; 
                if (cstatus == "A")     //activo
                {
                    tlbGuardar.Enabled = true;
                    mnuGuardar.Enabled = true;
                    lblStatus.Text = "ACTIVO";
                    lblStatus.ForeColor = System.Drawing.Color.Blue;
                }
                else
                {
                    lblStatus.Text = "ANULADO";
                    lblStatus.ForeColor = System.Drawing.Color.Red;
                    panDetalles.Enabled = false;
                    txtCodigo.Focus();  
                }
               
                tlbAnular.Enabled = true;
                mnuAnular.Enabled = true;
                tlbNuevo.Enabled = false;
                mnuNuevo.Enabled = false;
                tlbBuscar.Enabled = false;
                mnuBuscar.Enabled = false; 
 
                
                lblMensaje.Visible = true; 
                //Util.readOnlyInForm(panDetalles, false);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (lblMensaje.Visible)
            {
                backState(); 
            }
        }

        private void chkAnulados_CheckedChanged(object sender, EventArgs e)
        {
            buscar();
        }

    }
}